home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / Visual Cafe Pro v1.0 / TUTORIAL.BIN / MultiList.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-16  |  14.8 KB  |  858 lines

  1. package symantec.itools.awt;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Color;
  5. import java.awt.Component;
  6. import java.awt.Container;
  7. import java.awt.Dimension;
  8. import java.awt.Event;
  9. import java.awt.Font;
  10. import java.awt.FontMetrics;
  11. import java.awt.Frame;
  12. import java.awt.Graphics;
  13. import java.awt.Image;
  14. import java.awt.Panel;
  15. import java.awt.Rectangle;
  16. import java.awt.Scrollbar;
  17. import java.util.BitSet;
  18. import java.util.Date;
  19. import java.util.Vector;
  20. import symantec.beans.Beans;
  21.  
  22. public class MultiList extends Panel {
  23.    public static final long CLICKTHRESHOLD = 250L;
  24.    public static final int LEFT = 0;
  25.    public static final int CENTER = 1;
  26.    public static final int RIGHT = 2;
  27.    static CompareCells func = new CompareCells();
  28.    Color colorBg;
  29.    Color colorFg;
  30.    Color colorHBg;
  31.    Color colorHFg;
  32.    Matrix cells;
  33.    boolean multiSelect;
  34.    int[] splitters;
  35.    String[] headings;
  36.    int[] align;
  37.    Image[] cellIm;
  38.    Color headingBg;
  39.    Color headingFg;
  40.    Font headingFont;
  41.    Font cellFont;
  42.    // $FF: renamed from: sb java.awt.Scrollbar
  43.    Scrollbar field_0;
  44.    int cursor;
  45.    int colClick;
  46.    int memoryClick;
  47.    long clickTime;
  48.    BitSet highlightedRows;
  49.    int selectedRow;
  50.    int topRow;
  51.    int dragColumn;
  52.    int xDragLast;
  53.    boolean isDragging;
  54.    int headingHeight;
  55.    int cellHeight;
  56.    int cellAscent;
  57.    int cellDescent;
  58.    int clickMargin;
  59.    int currentCursor;
  60.    // $FF: renamed from: im java.awt.Image
  61.    Image field_1;
  62.    // $FF: renamed from: gg java.awt.Graphics
  63.    Graphics field_2;
  64.    int height;
  65.    int width;
  66.    int sbPosition;
  67.    long scrollbarTimer;
  68.  
  69.    public MultiList() {
  70.       this(0, false, Color.white);
  71.    }
  72.  
  73.    public MultiList(int var1) {
  74.       this(var1, false, Color.white);
  75.    }
  76.  
  77.    public MultiList(int var1, boolean var2) {
  78.       this(var1, var2, Color.white);
  79.    }
  80.  
  81.    public MultiList(int var1, boolean var2, Color var3) {
  82.       this.colorBg = Color.white;
  83.       this.colorFg = Color.black;
  84.       this.colorHBg = Color.blue;
  85.       this.colorHFg = Color.white;
  86.       this.cells = new Matrix();
  87.       this.multiSelect = false;
  88.       this.headingBg = Color.lightGray;
  89.       this.headingFg = Color.black;
  90.       this.colClick = -1;
  91.       this.memoryClick = -1;
  92.       this.highlightedRows = new BitSet();
  93.       this.dragColumn = -1;
  94.       this.xDragLast = -1;
  95.       this.clickMargin = 5;
  96.       this.height = -1;
  97.       this.width = -1;
  98.       this.createColumns(var1);
  99.       this.multiSelect = var2;
  100.       ((Container)this).setLayout(new BorderLayout());
  101.       this.setHeadingFont(new Font("Helvetica", 0, 12));
  102.       this.setCellFont(new Font("Helvetica", 0, 12));
  103.       ((Component)this).setBackground(this.colorBg = var3);
  104.       this.field_0 = new Scrollbar(1);
  105.       this.field_0.hide();
  106.       ((Container)this).add("East", this.field_0);
  107.    }
  108.  
  109.    public void setColumns(int var1) {
  110.       this.createColumns(var1);
  111.    }
  112.  
  113.    public int getColumns() {
  114.       return this.headings.length;
  115.    }
  116.  
  117.    public void setHeading(String var1, int var2, int var3) {
  118.       this.headings[var2 - 1] = var1;
  119.       this.splitters[var2] = var3;
  120.       this.redraw();
  121.       ((Component)this).repaint();
  122.    }
  123.  
  124.    public String getHeading(int var1) {
  125.       return this.headings[var1];
  126.    }
  127.  
  128.    public void setHeadings(String[] var1) {
  129.       if (var1.length == 0) {
  130.          this.createColumns(0);
  131.          ((Component)this).invalidate();
  132.       } else {
  133.          Dimension var2 = ((Component)this).size();
  134.          int var3 = 0;
  135.          int var4 = var2.width / var1.length;
  136.          this.splitters[0] = var4;
  137.          this.createColumns(var1.length);
  138.  
  139.          for(int var5 = 0; var5 < var1.length; ++var5) {
  140.             this.setHeading(var1[var5], var5 + 1, var3 += var4);
  141.          }
  142.       }
  143.  
  144.       this.redraw();
  145.       ((Component)this).repaint();
  146.    }
  147.  
  148.    public String[] getHeadings() {
  149.       return this.headings;
  150.    }
  151.  
  152.    public void setHeadingFont(Font var1) {
  153.       this.headingFont = var1;
  154.       this.headingHeight = ((Component)this).getFontMetrics(var1).getHeight() + 4;
  155.       this.redraw();
  156.       ((Component)this).repaint();
  157.    }
  158.  
  159.    public Font getHeadingFont() {
  160.       return this.headingFont;
  161.    }
  162.  
  163.    public void setCellFont(Font var1) {
  164.       this.cellFont = var1;
  165.       this.cellAscent = ((Component)this).getFontMetrics(var1).getAscent();
  166.       this.cellDescent = ((Component)this).getFontMetrics(var1).getDescent();
  167.       this.cellHeight = ((Component)this).getFontMetrics(var1).getHeight();
  168.       this.redraw();
  169.       ((Component)this).repaint();
  170.    }
  171.  
  172.    public Font getCellFont() {
  173.       return this.cellFont;
  174.    }
  175.  
  176.    public void setHeadingColors(Color var1, Color var2) {
  177.       this.headingFg = var1;
  178.       this.headingBg = var2;
  179.       this.redraw();
  180.       ((Component)this).repaint();
  181.    }
  182.  
  183.    public void setHeadingFg(Color var1) {
  184.       this.headingFg = var1;
  185.       this.redraw();
  186.       ((Component)this).repaint();
  187.    }
  188.  
  189.    public void setHeadingBg(Color var1) {
  190.       this.headingBg = var1;
  191.       this.redraw();
  192.       ((Component)this).repaint();
  193.    }
  194.  
  195.    public Color getHeadingFg() {
  196.       return this.headingFg;
  197.    }
  198.  
  199.    public Color getHeadingBg() {
  200.       return this.headingBg;
  201.    }
  202.  
  203.    public void setCellColors(Color var1, Color var2) {
  204.       this.colorFg = var1;
  205.       this.colorBg = var2;
  206.       this.redraw();
  207.       ((Component)this).repaint();
  208.    }
  209.  
  210.    public void setCellFg(Color var1) {
  211.       this.colorFg = var1;
  212.       this.redraw();
  213.       ((Component)this).repaint();
  214.    }
  215.  
  216.    public void setCellBg(Color var1) {
  217.       this.colorBg = var1;
  218.       this.redraw();
  219.       ((Component)this).repaint();
  220.    }
  221.  
  222.    public Color getCellFg() {
  223.       return this.colorFg;
  224.    }
  225.  
  226.    public Color getCellBg() {
  227.       return this.colorBg;
  228.    }
  229.  
  230.    public int getColumnSize(int var1) {
  231.       return this.splitters[var1];
  232.    }
  233.  
  234.    public void setColumnAlignment(int var1, int var2) {
  235.       this.align[var1] = var2;
  236.    }
  237.  
  238.    public int getNumberofCols() {
  239.       return this.headings.length;
  240.    }
  241.  
  242.    public void setSelectedRow(int var1) throws IllegalArgumentException {
  243.       if (var1 > this.cells.rows()) {
  244.          throw new IllegalArgumentException(var1 + " is not a valid row number");
  245.       } else {
  246.          this.selectedRow = var1;
  247.          this.redraw();
  248.          ((Component)this).repaint();
  249.       }
  250.    }
  251.  
  252.    public int getSelectedRow() {
  253.       return this.selectedRow;
  254.    }
  255.  
  256.    public int[] getSelectedRows() {
  257.       int var1 = this.highlightedRows.size();
  258.       int var2 = 0;
  259.  
  260.       for(int var3 = 0; var3 < var1; ++var3) {
  261.          if (this.highlightedRows.get(var3)) {
  262.             ++var2;
  263.          }
  264.       }
  265.  
  266.       int[] var4 = new int[var2];
  267.       var2 = 0;
  268.  
  269.       for(int var5 = 0; var5 < var1; ++var5) {
  270.          if (this.highlightedRows.get(var5)) {
  271.             var4[var2++] = var5;
  272.          }
  273.       }
  274.  
  275.       return var4;
  276.    }
  277.  
  278.    public boolean mouseDown(Event var1, int var2, int var3) {
  279.       if (var3 < this.headingHeight) {
  280.          for(int var4 = 1; var4 < this.headings.length; ++var4) {
  281.             if (var2 < this.splitters[var4] + this.clickMargin && var2 > this.splitters[var4] - this.clickMargin) {
  282.                this.dragColumn = var4;
  283.                this.isDragging = true;
  284.                this.mouseDrag(var1, var2, var3);
  285.                return true;
  286.             }
  287.          }
  288.  
  289.          for(int var5 = 0; var5 < this.headings.length; ++var5) {
  290.             int var6 = var5 == this.headings.length - 1 ? ((Component)this).size().width : this.splitters[var5 + 1];
  291.             if (var2 > this.splitters[var5] && var2 < var6) {
  292.                this.colClick = var5;
  293.                this.drawHeading(true);
  294.                ((Component)this).repaint();
  295.                return true;
  296.             }
  297.          }
  298.       }
  299.  
  300.       if (var2 > this.width) {
  301.          return false;
  302.       } else {
  303.          int var7 = this.selectedRow;
  304.          this.changeSelection((var3 - this.headingHeight - 4) / this.cellHeight + this.topRow, var1.modifiers);
  305.          if (this.selectedRow == var7 || var7 < 0) {
  306.             long var8 = var1.when - this.clickTime;
  307.             if (var8 < 250L) {
  308.                this.postEvent(1001, this.selectedRow);
  309.             }
  310.          }
  311.  
  312.          this.clickTime = var1.when;
  313.          return false;
  314.       }
  315.    }
  316.  
  317.    public boolean mouseDrag(Event var1, int var2, int var3) {
  318.       Dimension var4 = ((Component)this).size();
  319.       if (this.isDragging) {
  320.          if (var2 < 0) {
  321.             var2 = 0;
  322.          }
  323.  
  324.          this.field_2.setColor(this.colorBg);
  325.          this.field_2.setXORMode(Color.black);
  326.          this.field_2.drawLine(this.xDragLast, 0, this.xDragLast, var4.height);
  327.          this.field_2.drawLine(var2, 0, var2, var4.height);
  328.          this.field_2.setColor(Color.black);
  329.          this.field_2.setPaintMode();
  330.          this.xDragLast = var2;
  331.          ((Component)this).repaint();
  332.          return true;
  333.       } else {
  334.          if (this.colClick > -1) {
  335.             int var6;
  336.             if (this.colClick == 0) {
  337.                var6 = 0;
  338.             } else {
  339.                var6 = this.splitters[this.colClick];
  340.             }
  341.  
  342.             int var5;
  343.             if (this.colClick == this.headings.length - 1) {
  344.                var5 = var4.width;
  345.             } else {
  346.                var5 = this.splitters[this.colClick + 1];
  347.             }
  348.  
  349.             if (var2 < var6 || var2 > var5 || var3 > this.headingHeight || var3 < 0) {
  350.                this.memoryClick = this.colClick;
  351.                this.colClick = -1;
  352.                this.drawHeading(false);
  353.                ((Component)this).repaint();
  354.             }
  355.          } else if (this.memoryClick > -1) {
  356.             int var8;
  357.             if (this.memoryClick == 0) {
  358.                var8 = 0;
  359.             } else {
  360.                var8 = this.splitters[this.memoryClick];
  361.             }
  362.  
  363.             int var7;
  364.             if (this.memoryClick == this.headings.length - 1) {
  365.                var7 = var4.width;
  366.             } else {
  367.                var7 = this.splitters[this.memoryClick + 1];
  368.             }
  369.  
  370.             if (var2 > var8 && var2 < var7 && var3 < this.headingHeight && var3 > 0) {
  371.                this.colClick = this.memoryClick;
  372.                this.memoryClick = -1;
  373.                this.drawHeading(false);
  374.                ((Component)this).repaint();
  375.             }
  376.          }
  377.  
  378.          return true;
  379.       }
  380.    }
  381.  
  382.    public boolean mouseUp(Event var1, int var2, int var3) {
  383.       if (this.isDragging) {
  384.          if (var2 < 0) {
  385.             var2 = 0;
  386.          }
  387.  
  388.          this.field_2.setColor(this.colorBg);
  389.          this.field_2.setXORMode(Color.black);
  390.          this.field_2.drawLine(this.xDragLast, 0, this.xDragLast, ((Component)this).size().height);
  391.          this.field_2.setColor(Color.black);
  392.          this.field_2.setPaintMode();
  393.          this.xDragLast = -1;
  394.          this.isDragging = false;
  395.          this.splitters[this.dragColumn] = var2;
  396.          this.redraw();
  397.          ((Component)this).repaint();
  398.          return true;
  399.       } else if (this.colClick != -1) {
  400.          this.highlightedRows = new BitSet();
  401.          this.selectedRow = -1;
  402.          this.cells.sort(func, this.colClick);
  403.          this.colClick = -1;
  404.          this.redraw();
  405.          ((Component)this).repaint();
  406.          return true;
  407.       } else {
  408.          return false;
  409.       }
  410.    }
  411.  
  412.    public boolean mouseMove(Event var1, int var2, int var3) {
  413.       boolean var4 = false;
  414.       if (var3 < this.headingHeight) {
  415.          for(int var5 = 1; var5 < this.headings.length; ++var5) {
  416.             if (var2 < this.splitters[var5] + this.clickMargin && var2 > this.splitters[var5] - this.clickMargin) {
  417.                var4 = true;
  418.             }
  419.          }
  420.       }
  421.  
  422.       int var7 = var4 ? 10 : 0;
  423.       if (var7 != this.currentCursor) {
  424.          Frame var6 = this.frame();
  425.          if (var6 != null) {
  426.             var6.setCursor(this.currentCursor = var7);
  427.          }
  428.       }
  429.  
  430.       return false;
  431.    }
  432.  
  433.    public boolean keyDown(Event var1, int var2) {
  434.       switch (var2) {
  435.          case 10:
  436.             if (this.selectedRow > -1) {
  437.                this.postEvent(1001, this.selectedRow);
  438.             }
  439.             break;
  440.          case 1002:
  441.             this.changeSelection(this.selectedRow - this.getPageSize(), var1.modifiers);
  442.             break;
  443.          case 1003:
  444.             this.changeSelection(this.selectedRow + this.getPageSize(), var1.modifiers);
  445.             break;
  446.          case 1004:
  447.             if (this.selectedRow > 0) {
  448.                this.changeSelection(this.selectedRow - 1, var1.modifiers);
  449.             }
  450.             break;
  451.          case 1005:
  452.             if (this.selectedRow < this.cells.rows() - 1) {
  453.                this.changeSelection(this.selectedRow + 1, var1.modifiers);
  454.             }
  455.       }
  456.  
  457.       return false;
  458.    }
  459.  
  460.    public boolean handleEvent(Event var1) {
  461.       if (var1.target == this.field_0 && var1.arg != null) {
  462.          Date var2 = new Date();
  463.          var1.when = var2.getTime();
  464.          if (var1.when - this.scrollbarTimer < 300L && var1.id == 605) {
  465.             return false;
  466.          }
  467.  
  468.          this.scrollbarTimer = var1.when;
  469.          if (this.topRow != this.field_0.getValue()) {
  470.             this.topRow = this.field_0.getValue();
  471.             this.sbPosition = this.topRow;
  472.             this.redraw();
  473.             ((Component)this).repaint();
  474.          }
  475.       }
  476.  
  477.       return super.handleEvent(var1);
  478.    }
  479.  
  480.    public void createColumns(int var1) {
  481.       this.headings = new String[var1];
  482.       this.align = new int[var1];
  483.       this.splitters = new int[var1 + 1];
  484.       this.cellIm = new Image[var1];
  485.    }
  486.  
  487.    public void clear() {
  488.       this.cells.removeAllElements();
  489.       this.xDragLast = -1;
  490.       this.isDragging = false;
  491.       this.selectedRow = 0;
  492.       this.highlightedRows = new BitSet();
  493.       this.topRow = 0;
  494.    }
  495.  
  496.    public void addTextCell(int var1, int var2, String var3) {
  497.       Cell var4 = new Cell(this, var3);
  498.       this.cells.updateElement(var1, var2, var4);
  499.       ((Component)this).repaint();
  500.    }
  501.  
  502.    public void addImageCell(int var1, int var2, Image var3) {
  503.       Cell var4 = new Cell(this, var3);
  504.       this.cells.updateElement(var1, var2, var4);
  505.       ((Component)this).repaint();
  506.    }
  507.  
  508.    public void addCell(int var1, int var2, String var3, Image var4) {
  509.       Cell var5 = new Cell(this, var3, var4);
  510.       this.cells.updateElement(var1, var2, var5);
  511.       ((Component)this).repaint();
  512.    }
  513.  
  514.    public String getCellText(int var1, int var2) {
  515.       Cell var3 = (Cell)this.cells.elementAt(var1, var2);
  516.       return var3 != null ? var3.text : null;
  517.    }
  518.  
  519.    public void setListItems(String[] var1) {
  520.       this.clear();
  521.  
  522.       for(int var2 = 0; var2 < var1.length; ++var2) {
  523.          String var3 = var1[var2];
  524.          int var4 = var3.length();
  525.          int var5 = 0;
  526.          int var7 = 0;
  527.  
  528.          for(int var6 = 0; var6 <= var4 && var7 < this.headings.length; ++var6) {
  529.             if (var6 == var4 || var3.charAt(var6) == ';') {
  530.                this.addCell(var2, var7++, var3.substring(var5, var6), (Image)null);
  531.                var5 = var6 + 1;
  532.             }
  533.          }
  534.  
  535.          while(var7 < this.headings.length) {
  536.             this.addCell(var2, var7++, "", (Image)null);
  537.          }
  538.       }
  539.  
  540.       this.redraw();
  541.       ((Component)this).repaint();
  542.    }
  543.  
  544.    public String[] getListItems() {
  545.       Vector var1 = new Vector();
  546.       boolean var3 = false;
  547.       int var4 = 0;
  548.       int var5 = 0;
  549.  
  550.       while(true) {
  551.          String var2;
  552.          if ((var2 = this.getCellText(var4++, var5)) == null) {
  553.             if (var3) {
  554.                int var6 = var1.size();
  555.                String[] var7 = new String[var6];
  556.  
  557.                for(int var8 = 0; var8 < var6; ++var8) {
  558.                   var7[var8] = (String)var1.elementAt(var8);
  559.                }
  560.  
  561.                return var7;
  562.             }
  563.  
  564.             var3 = true;
  565.             var4 = 0;
  566.             ++var5;
  567.             var2 = "";
  568.          } else {
  569.             var3 = false;
  570.          }
  571.  
  572.          if (var5 == 0) {
  573.             var1.addElement(var2);
  574.          } else {
  575.             String var9 = (String)var1.elementAt(var4);
  576.             var9 = var9 + ";" + var2;
  577.             var1.setElementAt(var9, var4);
  578.          }
  579.       }
  580.    }
  581.  
  582.    public void update(Graphics var1) {
  583.       this.paint(var1);
  584.    }
  585.  
  586.    void checkClipping(Graphics var1) {
  587.       Rectangle var2 = var1.getClipRect();
  588.       Dimension var3 = ((Component)this).size();
  589.       if (var2.x != 0 || var2.y != 0 || var2.width != var3.width || var2.height != var3.height) {
  590.          ((Component)this).repaint();
  591.       }
  592.  
  593.    }
  594.  
  595.    public void paint(Graphics var1) {
  596.       this.checkClipping(var1);
  597.       Font var2 = var1.getFont();
  598.       Dimension var3 = ((Component)this).size();
  599.       if (var2 == null) {
  600.          var2 = this.headingFont;
  601.          ((Component)this).setFont(var2);
  602.       } else {
  603.          if (this.width != var3.width || this.height != var3.height || Beans.isDesignTime()) {
  604.             this.redraw();
  605.          }
  606.  
  607.          var1.drawImage(this.field_1, 0, 0, this);
  608.       }
  609.    }
  610.  
  611.    public void redraw() {
  612.       Dimension var1 = ((Component)this).size();
  613.       if (var1.width != 0 && var1.height != 0) {
  614.          if (this.width != var1.width || this.height != var1.height) {
  615.             this.field_1 = ((Component)this).createImage(this.width = var1.width, this.height = var1.height);
  616.             if (this.field_2 != null) {
  617.                this.field_2.dispose();
  618.             }
  619.  
  620.             this.field_2 = this.field_1.getGraphics();
  621.          }
  622.  
  623.          this.field_2.setColor(this.colorBg);
  624.          this.field_2.fillRect(0, 0, this.width, this.height);
  625.          if (this.cellHeight > 0 && this.cells.rows() * this.cellHeight > this.height - this.headingHeight) {
  626.             this.field_0.setValues(this.sbPosition, this.height / this.cellHeight, 0, this.cells.rows() - 1);
  627.             this.field_0.setPageIncrement(1);
  628.             this.field_0.show();
  629.             ((Component)this).getParent().paintAll(((Component)this).getParent().getGraphics());
  630.          } else {
  631.             this.topRow = 0;
  632.             this.field_0.hide();
  633.          }
  634.  
  635.          this.field_2.setFont(this.headingFont);
  636.          this.drawHeading(false);
  637.          int var2 = this.topRow + (this.cellHeight > 0 ? (this.height - 3) / this.cellHeight - 1 : 0);
  638.          if (var2 > this.cells.rows()) {
  639.             var2 = this.cells.rows();
  640.          }
  641.  
  642.          this.field_2.setFont(this.cellFont);
  643.          this.drawRows(0, var2, this.topRow);
  644.       }
  645.    }
  646.  
  647.    void drawRows(int var1, int var2, int var3) {
  648.       MatrixEnumeration var4 = this.cells.elements();
  649.       Cell var5 = null;
  650.       int var8 = this.headings.length;
  651.       if (var3 > 0) {
  652.          var5 = (Cell)var4.advanceTo(var3);
  653.       }
  654.  
  655.       while(var4.hasMoreElements() || var5 != null) {
  656.          for(int var9 = 0; var9 < var8; ++var9) {
  657.             int var7;
  658.             if (var9 < var8 - 1) {
  659.                var7 = this.splitters[var9 + 1] - this.splitters[var9];
  660.             } else {
  661.                int var10001 = this.splitters[var9];
  662.                var7 = ((Component)this).size().width - var10001 - 4;
  663.             }
  664.  
  665.             int var6 = var9 == 0 ? 1 : this.splitters[var9] - 3;
  666.             this.field_2.setColor(this.highlightedRows.get(var3) ? this.colorHBg : this.colorBg);
  667.             this.field_2.fillRect(var6, this.headingHeight + var1 * this.cellHeight + 4, var7 + 4, this.cellHeight);
  668.             this.field_2.setColor(this.highlightedRows.get(var3) ? this.colorHFg : this.colorFg);
  669.             if (var5 == null) {
  670.                var5 = (Cell)var4.nextElement();
  671.             }
  672.  
  673.             if (var5 != null && var4.currRow() == var3 && var4.currCol() == var9) {
  674.                var5.drawCell(this.field_2, this.align[var9], this.splitters[var9] + 3, this.headingHeight + var1 * this.cellHeight + 4, var7, this.cellHeight, this.cellAscent);
  675.                var5 = null;
  676.             }
  677.  
  678.             if (var5 != null && var4.currRow() < var3) {
  679.                var5 = null;
  680.             }
  681.          }
  682.  
  683.          --var2;
  684.          if (var2 == 0) {
  685.             break;
  686.          }
  687.  
  688.          ++var3;
  689.          ++var1;
  690.       }
  691.  
  692.    }
  693.  
  694.    boolean postEvent(int var1, int var2) {
  695.       return ((Component)this).postEvent(new Event(this, var1, new Integer(var2)));
  696.    }
  697.  
  698.    int getPageSize() {
  699.       return ((Component)this).size().height / this.cellHeight;
  700.    }
  701.  
  702.    void draw3DBox(Rectangle var1, boolean var2) {
  703.       int var3 = var1.x;
  704.       int var4 = var1.y;
  705.       int var5 = var1.x + var1.width;
  706.       int var6 = var1.y + var1.height;
  707.       this.field_2.setColor(var2 ? Color.black : Color.white);
  708.       this.field_2.drawLine(var5, var4, var5, var6);
  709.       this.field_2.drawLine(var5 + 1, var4, var5 + 1, var6);
  710.       this.field_2.drawLine(var3, var6, var5, var6);
  711.       this.field_2.drawLine(var3, var6 + 1, var5, var6 + 1);
  712.       this.field_2.setColor(var2 ? Color.white : Color.gray);
  713.       this.field_2.drawLine(var3, var4, var5 - 2, var4);
  714.       this.field_2.drawLine(var3, var4, var3, var6 - 1);
  715.    }
  716.  
  717.    void drawHeading(boolean var1) {
  718.       int var3 = 1;
  719.       byte var4 = 1;
  720.       Font var7 = ((Component)this).getFont();
  721.       this.field_2.setFont(this.headingFont);
  722.       FontMetrics var8 = this.field_2.getFontMetrics();
  723.       Dimension var2 = ((Component)this).size();
  724.  
  725.       for(int var9 = 0; var9 < this.headings.length; ++var9) {
  726.          var3 = this.splitters[var9];
  727.          int var5;
  728.          int var6;
  729.          if (var9 < this.headings.length - 1) {
  730.             var6 = this.splitters[var9 + 1];
  731.             var5 = var6 - var3;
  732.          } else {
  733.             var6 = var2.width;
  734.             var5 = var6 - var3;
  735.          }
  736.  
  737.          Rectangle var10 = new Rectangle(var3, var4, var5 - 2, this.headingHeight);
  738.          this.draw3DBox(var10, this.colClick != var9);
  739.          this.field_2.setColor(this.headingBg);
  740.          this.field_2.fillRect(var10.x + 1, var10.y + 1, var5 - 3, this.headingHeight - 1);
  741.          this.field_2.setColor(this.headingFg);
  742.          if (this.headings[var9] != null) {
  743.             int var11 = var8.stringWidth(this.headings[var9]);
  744.             int var12 = var5 - 3;
  745.             int var13 = var1 && this.colClick == var9 ? 1 : 0;
  746.             switch (this.align[var9]) {
  747.                case 0:
  748.                   this.field_2.drawString(this.headings[var9], var3 + 8 + var13, this.headingHeight - 3 + var13);
  749.                   break;
  750.                case 1:
  751.                   if (var11 > var12) {
  752.                      this.field_2.drawString(this.headings[var9], var3 + 8 + var13, this.headingHeight - 3 + var13);
  753.                   } else {
  754.                      this.field_2.drawString(this.headings[var9], var3 + (var12 - var11) / 2 + var13, this.headingHeight - 3 + var13);
  755.                   }
  756.                   break;
  757.                case 2:
  758.                   if (var11 > var12) {
  759.                      this.field_2.drawString(this.headings[var9], var3 + 8 + var13, this.headingHeight - 3 + var13);
  760.                   } else {
  761.                      this.field_2.drawString(this.headings[var9], var3 + var12 - var11 - 6 + var13, this.headingHeight - 3 + var13);
  762.                   }
  763.             }
  764.  
  765.             if (this.colClick == var9) {
  766.                this.field_2.drawLine(var10.x + 1, this.headingHeight + 2, var6 - 3, this.headingHeight + 2);
  767.             }
  768.          }
  769.       }
  770.  
  771.       this.field_2.setColor(Color.black);
  772.       this.field_2.drawRect(0, 0, var2.width - 1, var2.height - 1);
  773.       this.field_2.setFont(var7);
  774.    }
  775.  
  776.    Frame frame() {
  777.       Object var1;
  778.       for(var1 = this; var1 != null && !(var1 instanceof Frame); var1 = ((Component)var1).getParent()) {
  779.       }
  780.  
  781.       return (Frame)var1;
  782.    }
  783.  
  784.    void changeSelection(int var1, int var2) {
  785.       if (this.multiSelect) {
  786.          switch (var2) {
  787.             case 1:
  788.                for(int var3 = Math.min(this.selectedRow, var1); var3 <= Math.max(this.selectedRow, var1); ++var3) {
  789.                   if (var3 >= 0) {
  790.                      this.highlightedRows.set(var3);
  791.                   }
  792.                }
  793.                break;
  794.             case 2:
  795.                if (this.highlightedRows.get(var1)) {
  796.                   this.highlightedRows.clear(var1);
  797.                } else {
  798.                   this.highlightedRows.set(var1);
  799.                }
  800.                break;
  801.             default:
  802.                this.highlightedRows = new BitSet();
  803.                this.highlightedRows.set(var1);
  804.          }
  805.       } else {
  806.          if (this.selectedRow >= 0) {
  807.             this.highlightedRows.clear(this.selectedRow);
  808.          }
  809.  
  810.          this.highlightedRows.set(var1);
  811.       }
  812.  
  813.       int var4 = this.cells.rows();
  814.       if (var1 > var4 - 1) {
  815.          var1 = var4 - 1;
  816.       } else if (var1 < 0) {
  817.          var1 = 0;
  818.       }
  819.  
  820.       if (var1 < this.topRow) {
  821.          this.topRow = var1 - 1;
  822.          if (this.topRow < 0) {
  823.             this.topRow = 0;
  824.          }
  825.  
  826.          this.sbPosition = this.topRow;
  827.          this.field_0.setValue(this.sbPosition);
  828.       }
  829.  
  830.       if (var1 >= -1 + this.topRow + this.getPageSize()) {
  831.          ++this.topRow;
  832.          if (this.topRow > var4 - 1) {
  833.             this.topRow = var1;
  834.          }
  835.  
  836.          this.sbPosition = this.topRow;
  837.          this.field_0.setValue(this.sbPosition);
  838.       }
  839.  
  840.       if (this.selectedRow != var1 && var2 > 0) {
  841.          this.postEvent(702, this.selectedRow);
  842.       }
  843.  
  844.       this.selectedRow = var1;
  845.       this.redraw();
  846.       ((Component)this).repaint();
  847.       this.postEvent(701, var1);
  848.    }
  849.  
  850.    public synchronized Dimension preferredSize() {
  851.       return new Dimension(175, 125);
  852.    }
  853.  
  854.    public synchronized Dimension minimumSize() {
  855.       return new Dimension(50, 50);
  856.    }
  857. }
  858.